package com.eugenema.handler;

import com.eugenema.entity.TestStep;
import com.eugenema.util.SeleniumUtil;
import com.eugenema.util.SeleniumXmlParseUtil;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;

/**
 * 点击、切换界面操作处理器
 *
 * @author Eugenema
 * @date 2023/3/11 19:40
 *
 **/
public class ClickActionHandler {
	/**
	 * Web 端点击操作
	 * <br/>默认点击获取到的第一个元素
	 *
	 * @author Eugenema
	 * @date 2023/3/11 19:42
	 *
	 * @param testStep 动作
	 *
	 **/
	public void webClick(TestStep testStep) throws Exception {
		 SeleniumUtil.getElements(testStep).get(0).click();
	}

	/**
	 * Web 端滚动到元素位置操作
	 * <br/>默认滚动到获取到的第一个元素位置
	 *
	 * @author Eugenema
	 * @date 2023/3/11 19:50
	 *
	 * @param testStep 动作
	 *
	 **/
	public void scrollElement(TestStep testStep) throws Exception {
        WebElement element = SeleniumUtil.getElements(testStep).get(0);
        JavascriptExecutor js = (JavascriptExecutor)SeleniumUtil.getDriver();
        js.executeScript("arguments[0].scrollIntoView(true)", element);
    }

	/**
	 * Web 端切换到指定的 iframe 控件操作
	 *
	 *
	 * @author Eugenema
	 * @date 2023/3/11 19:54
	 *
	 * @param testStep 动作
	 *
	 **/
	public void switchIframe(TestStep testStep) {
		SeleniumUtil.getDriver().switchTo().frame(Integer.parseInt(testStep.getValue()));
    }

	/**
	 * Web 端退出 iframe 控件操作
	 *
	 * @author Eugenema
	 * @date 2023/3/11 20:07
	 *
	 * @param testStep 动作
	 *
	 **/
	public void quitIframe(TestStep testStep) {
		SeleniumUtil.getDriver().switchTo().defaultContent();
    }

	/**
	 * Web 端点击浏览器弹出窗的确定（true）/取消（false）键
	 *
	 * @author Eugenema
	 * @date 2023/3/11 21:26
	 *
	 * @param testStep 动作
	 *
	 **/
	public void clickAlertBtn(TestStep testStep) {
		String value = testStep.getValue();
		if (SeleniumXmlParseUtil.BOOLEAN_TRUE.equals(value)) {
			//点击确定
			SeleniumUtil.getDriver().switchTo().alert().accept();
		} else {
			//点击取消
			SeleniumUtil.getDriver().switchTo().alert().dismiss();
		}
	}
	
	/**
	 * Web 端处理 prompt 弹窗的文本输入
	 * <br/>输入文本后，会点击确认
	 *
	 * @author Eugenema
	 * @date 2023/3/11 21:34
	 *
	 * @param testStep 动作
	 *
	 **/
	public void clickPromptInput(TestStep testStep) {
		SeleniumUtil.getDriver().switchTo().alert().sendKeys(testStep.getValue());
		SeleniumUtil.getDriver().switchTo().alert().accept();
    }
}
